package xin.javashare.javacollectionsframework;

import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

/**
 * 程序清单22.4 P24 【树形集】
 */
public class TestTreeSet {
    public static void main(String[] args) {
        Set<String> set = new HashSet<String>();
        set.add("London");
        set.add("Paris");
        set.add("New York");
        set.add("San Francisco");
        set.add("Beijing");
        set.add("New York");

        // 规则集只能存储不重复的元素；散列集没有特定的顺序；
        System.out.println(set);
        // 树形集以自然顺序排序
        TreeSet<String> treeSet = new TreeSet<String>(set); // 这样只排序一次
        System.out.println("Sorted TreeSet: " + treeSet);

        // Use the methods in SortedSet interface
        // TreeSet实现了SortedSet接口的一个具体类，SortedSet是Set接口的子接口；
        System.out.println("first(): " + treeSet.first());
        System.out.println("last(): " + treeSet.last());
        System.out.println("headSet: " + treeSet.headSet("New York"));// 小于New York的那一部分
        System.out.println("tailSet: " + treeSet.tailSet("New York"));

        // Use the methods in NavigableSet interface
        // NavigableSet扩展了SortedSet，并提供导航方法lower(e),floor(e),ceiling(e)和higher(e)
        // pollFirst(),pollLast()删除和返回树形集中的第一个和最后一个元素
        System.out.println("lower(\"p\"): " + treeSet.lower("P"));
        System.out.println("floor(\"p\"): " + treeSet.floor("P"));
        System.out.println("ceiling(\"p\"): " + treeSet.ceiling("P"));
        System.out.println("higher(\"p\"): " + treeSet.higher("P"));
        System.out.println("pollFirst(): " + treeSet.pollFirst());
        System.out.println("pollLast(): " + treeSet.pollLast());
        System.out.println("New treeSet: " + treeSet);
    }
}
